# -*- coding:utf-8 -*-
# @FileName : app\models\task_step.py
# @Time     : 2025/11/28
# @Author   : 天空之城
"""任务执行步骤模型文件

此模块定义任务执行步骤模型，使用SQLAlchemy进行ORM映射。
"""
from enum import Enum
from app.extensions import db


class TaskStepStatus(Enum):
    """任务步骤状态枚举"""
    PENDING = "pending"
    SUCCESS = "success"
    FAILED = "failed"


class TaskActionType(Enum):
    """任务操作类型枚举"""
    CLICK = "click"
    TYPE = "type"
    SCROLL = "scroll"
    CHECK = "check"


class TaskStep(db.Model):
    """任务执行步骤模型
    
    定义任务执行步骤表结构，记录任务中的每一步操作。
    """
    __tablename__ = 'task_steps'
    
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 步骤ID
    execution_id = db.Column(db.Integer, db.ForeignKey('task_executions.id'), nullable=False)  # 关联任务执行ID
    step_number = db.Column(db.Integer, nullable=False)  # 排序号
    action_type = db.Column(db.Enum(TaskActionType), nullable=False)  # 操作类型
    description = db.Column(db.Text, nullable=False)  # 步骤描述
    screenshot_path = db.Column(db.String(255), nullable=True)  # 截图文件路径
    status = db.Column(db.Enum(TaskStepStatus), default=TaskStepStatus.PENDING)  # 步骤状态
    created_at = db.Column(db.DateTime, default=db.func.current_timestamp())  # 创建时间
    updated_at = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())  # 更新时间
    
    def __repr__(self):
        """返回任务执行步骤对象的字符串表示"""
        return f'<TaskStep {self.id} - Execution {self.execution_id} - Step {self.step_number}>'